package sifeap.entities.solicitudescredito;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import sifeap.entities.soportes.Soporte;
import sifeap.entities.usuarios.Usuario;


/**
 * The persistent class for the solicitudescredito database table.
 * 
 */
@Entity
@Cacheable(false)
@Table(name="solicitudescredito", schema="sifeap")
public class SolicitudCredito implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name = "IDSOLCREDITO_GENERATOR", sequenceName = "seq_solicitudescredito", schema="sifeap", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IDSOLCREDITO_GENERATOR")
	@Column(unique=true, nullable=false, precision=8)
	private long idSolicitudCredito;

	@Column(length=256)
	private String comentario;

	@Column(length=128)
	private String descripcionHipoteca;

	@Column(name="descripcionotrosing", length=128)
	private String descripcionOtrosIngresos;

	@Column(length=128)
	private String descripcionPrenda;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date fechaSolicitud;

	@Column(nullable=false, precision=10)
	private Long montoSolicitado;

	@Column(precision=10)
	private Long otrosIngresos;
	
	@Column(length=128)
	private String otroTipoCredito;

	@Column(nullable=false, precision=3)
	private Integer plazo;

	@Column(precision=10)
	private Long valorHipoteca;

	@Column(precision=10)
	private Long valorPrenda;

	@Column(nullable=false, length=15)
	private String vincedula;

	//bi-directional many-to-one association to Codeudor
	@OneToMany(mappedBy="solicitudescredito")
	private List<Codeudor> codeudores;

	//bi-directional many-to-one association to EstadoCredito
	@ManyToOne
	@JoinColumn(name="idestadocredito", nullable=false)
	private EstadoCredito estadoscredito;

	//bi-directional many-to-one association to TipoCredito
	@ManyToOne
	@JoinColumn(name="idtipocredito", nullable=false)
	private TipoCredito tiposcredito;

	//bi-directional many-to-one association to Usuario2
	@ManyToOne
	@JoinColumn(name="nombreusuario", nullable=false)
	private Usuario usuario;

	//bi-directional many-to-many association to Soporte
	@ManyToMany(mappedBy="solicitudescreditos")
	private List<Soporte> soportes;

	public SolicitudCredito() {
	}

	public long getIdSolicitudCredito() {
		return this.idSolicitudCredito;
	}

	public void setIdSolicitudCredito(long idSolicitudCredito) {
		this.idSolicitudCredito = idSolicitudCredito;
	}

	public String getComentario() {
		return this.comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public String getDescripcionHipoteca() {
		return this.descripcionHipoteca;
	}

	public void setDescripcionHipoteca(String descripcionHipoteca) {
		this.descripcionHipoteca = descripcionHipoteca;
	}

	public String getDescripcionOtrosIngresos() {
		return this.descripcionOtrosIngresos;
	}

	public void setDescripcionOtrosIngresos(String descripcionOtrosIngresos) {
		this.descripcionOtrosIngresos = descripcionOtrosIngresos;
	}

	public String getDescripcionPrenda() {
		return this.descripcionPrenda;
	}

	public void setDescripcionPrenda(String descripcionPrenda) {
		this.descripcionPrenda = descripcionPrenda;
	}

	public Date getFechaSolicitud() {
		return this.fechaSolicitud;
	}

	public void setFechaSolicitud(Date fechaSolicitud) {
		this.fechaSolicitud = fechaSolicitud;
	}

	public Long getMontoSolicitado() {
		return this.montoSolicitado;
	}

	public void setMontoSolicitado(Long montoSolicitado) {
		this.montoSolicitado = montoSolicitado;
	}

	public Long getOtrosIngresos() {
		return this.otrosIngresos;
	}

	public void setOtrosIngresos(Long otrosIngresos) {
		this.otrosIngresos = otrosIngresos;
	}
	
	public String getOtroTipoCredito() {
		return this.otroTipoCredito;
	}
	
	public void setOtroTipoCredito(String otroTipoCredito) {
		this.otroTipoCredito = otroTipoCredito;
	}

	public Integer getPlazo() {
		return this.plazo;
	}

	public void setPlazo(Integer plazo) {
		this.plazo = plazo;
	}

	public Long getValorHipoteca() {
		return this.valorHipoteca;
	}

	public void setValorHipoteca(Long valorHipoteca) {
		this.valorHipoteca = valorHipoteca;
	}

	public Long getValorPrenda() {
		return this.valorPrenda;
	}

	public void setValorPrenda(Long valorPrenda) {
		this.valorPrenda = valorPrenda;
	}

	public String getVincedula() {
		return this.vincedula;
	}

	public void setVincedula(String vincedula) {
		this.vincedula = vincedula;
	}

	public List<Codeudor> getCodeudores() {
		return this.codeudores;
	}

	public void setCodeudores(List<Codeudor> codeudores) {
		this.codeudores = codeudores;
	}

	public Codeudor addCodeudore(Codeudor codeudore) {
		getCodeudores().add(codeudore);
		codeudore.setSolicitudescredito(this);

		return codeudore;
	}

	public Codeudor removeCodeudore(Codeudor codeudore) {
		getCodeudores().remove(codeudore);
		codeudore.setSolicitudescredito(null);

		return codeudore;
	}

	public EstadoCredito getEstadoscredito() {
		return this.estadoscredito;
	}

	public void setEstadoscredito(EstadoCredito estadoscredito) {
		this.estadoscredito = estadoscredito;
	}

	public TipoCredito getTiposcredito() {
		return this.tiposcredito;
	}

	public void setTiposcredito(TipoCredito tiposcredito) {
		this.tiposcredito = tiposcredito;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Soporte> getSoportes() {
		return this.soportes;
	}

	public void setSoportes(List<Soporte> soportes) {
		this.soportes = soportes;
	}

}